Testing Complex Integrated Circuits
As integrated circuits become more complex, they become more difficult to test. A complex digital circuit is typically sequential, that is, it consists of combinational logic, memory elements, some primary inputs, and some outputs through which it communicates with the external world. Testing an integrated circuit involves applying a test vector at the primary inputs and observing its responses at the primary outputs. To fully test an integrated circuit, a set of test vectors must be generated such that possible faults on all the circuit's internal nodes can be detected by observing responses. This is made difficult by the inadequacy of access provided by the limited number of externally controllable primary inputs and externally observable primary outputs. Further, it is made even more difficult by the presence of internal memory elements and feedback in the logic.
To make the testing of a complex integrated circuit manageable, the circuit can be designed to provide for access to all or a selected set of the memory elements of the circuit by making the memory elements "scannable". In a scannable memory element, a second "scan" input to each memory element is provided and is connected to the output of another memory element, so that the memory elements form a shift register.
The scan feature can be used in testing a circuit as follows. The memory elements are first set to predetermined states by shifting a test vector into the shift register formed by enabling the test inputs to the memory elements. The circuit is then operated for one or more clock cycles in its normal mode of operation. The resulting states of all of the memory elements are then read by again enabling the test inputs and shifting the result vector to an output terminal. While the result vector is being shifted out, another test vector can be shifted in, in preparation for another test.
Making internal memory elements scannable not only provides additional directly controllable and observable points within the circuit, but also converts the difficult problem of testing a sequential circuit to the easier problem of testing a combination circuit.